package com.dragoncombin.homework.Module04.Problem04;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.Scanner;

public class ClientTest {

    public static void main(String[] args) {
        Socket socket = null;
        ObjectOutputStream oos = null;
        ObjectInputStream ois;
        Scanner in = new Scanner(System.in);
        try {
            // 1. 创建Socket类型的对象，指定与服务器通信的IP地址和客户端
            socket = new Socket("127.0.0.1", 8989);

            // 2. 使用Socket通过输入输出流与服务端进行通信
            System.out.println("成功连接服务器");
            // 实现向服务器输出的对象流
            oos = new ObjectOutputStream(socket.getOutputStream());
            // 实现获取服务器输入内容的对象流
            ois = new ObjectInputStream(socket.getInputStream());

            // 提示用户输入用户名和密码
            while (true) {
                System.out.println("=========登录界面=========");
                System.out.print("请输入用户名: ");
                String userName = in.next();
                System.out.print("请输入密码: ");
                String password = in.next();

                // 创建User类型的对象  -- 可拓展为提示用户输入用户名和密码
                User user = new User(userName, password);
                // 创建UserMessage类型的对象
                UserMessage um = new UserMessage("check", user);
                // 将UserMessage类型的对象um写入输出流
                oos.writeObject(um);
                System.out.println("等待登录中...");

                // 接收服务端的返回的信息
                UserMessage obj = (UserMessage) ois.readObject();
                Thread.sleep(2000);
                if ("success".equals(obj.getType())) {
                    System.out.println("登录成功...");
                    break;
                } else {
                    System.out.println("登录失败，请核对用户名和密码后重新登录..");
                }
            }

        } catch (IOException | ClassNotFoundException | InterruptedException e) {
            e.printStackTrace();
        } finally {
            /* 3. 关闭Socket并释放资源 */
            in.close();
            if (null != oos) {
                try {
                    oos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if (null != socket) {
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}
